<h2>DESCRIPTION</h2>

<em>r.surf.idw</em> fills a grid cell (raster) matrix with
interpolated values generated from input raster
data points. It uses a numerical approximation technique
based on distance squared weighting of the values of
nearest data points. The number of nearest data points used
to determined the interpolated value of a cell can be
specified by the user (default: 12 nearest data points).

<p>
If there is a current working mask, it applies to the output 
raster map. Only those cells falling within the mask will be 
assigned interpolated values. The search procedure for the 
selection of nearest neighboring points will consider all 
input data, without regard to the mask. 

The <b>-e</b> flag is the error analysis option that interpolates values
only for those cells of the input raster map which have non-zero values and
outputs the difference (see <a href="#minuse.html">NOTES</a> below).
<p>The <b>npoints</b> parameter defines the number of nearest data points used
to determine the interpolated value of an output raster cell.

<h2>NOTES</h2>

<em>r.surf.idw</em> is a surface generation utility which
uses inverse distance squared weighting (as described in
<i>Applied Geostatistics</i> by E. H. Isaaks and R. M.
Srivastava, Oxford University Press, 1989) to assign
interpolated values. The implementation includes a
customized data structure somewhat akin to a sparse matrix
which enhances the efficiency with which nearest data
points are selected.  For latitude/longitude projections,
distances are calculated from point to point along a
geodesic.

<p>
Unlike <em><a href="https://grass.osgeo.org/grass8/manuals/addons/r.surf.idw2.html">r.surf.idw2</a></em> (addon),
which processes all input data points in each interpolation cycle, <em>r.surf.idw</em>
attempts to minimize the number of input data for which distances must be
calculated. Execution speed is therefore a function of the search effort,
and does not increase appreciably with the number of input data points.

<p>
<em>r.surf.idw</em> will generally outperform 
<em>r.surf.idw2</em> except when the input data
layer contains few non-zero data, i.e. when the cost of the search exceeds
the cost of the additional distance calculations performed by 
<em>r.surf.idw2</em>. The relative performance
of these utilities will depend on the comparative speed of boolean, integer
and floating point operations on a particular platform.

<p>
Worst case search performance by <em>r.surf.idw</em> occurs
when the interpolated cell is located outside of the region
in which input data are distributed. It therefore behooves
the user to employ a mask when geographic region boundaries
include large areas outside the general extent of the input
data.

<p>
The degree of smoothing produced by the interpolation will
increase relative to the number of nearest data points
considered.  The utility may be used with regularly or
irregularly spaced input data.  However, the output result
for the former may include unacceptable nonconformities in
the surface pattern.

<a name="minuse.html"></a>
<p>
The <b>-e</b> flag option provides a standard
surface-generation error analysis facility. It produces an output raster map
of the difference of interpolated values minus input values for those cells
whose input data are non-zero. For each interpolation cycle, the known value
of the cell under consideration is ignored, and the remaining input values
are used to interpolate a result. The output raster map may be compared to
the input raster map to analyze the distribution of interpolation error.
This procedure may be helpful in choosing the number of nearest neighbors
considered for surface generation.

<!-- requires https://trac.osgeo.org/grass/ticket/2672 to be fixed:

<h2>EXAMPLE</h2>

Interpolation of raster surface from randomly sampled vector elevation
points (North Carolina sample dataset region):

<div class="code"><pre>
g.region vector=elev_lid792_randpts res=1 -p
# rasterize points
v.to.rast input=elev_lid792_randpts use=attr attribute_column=value \
          output=elev_lid792_randpts_1m
# interpolation DEM
r.surf.idw input=elev_lid792_randpts_1m output=elev_surf_1m_idw

# validate: differences to original DEM
r.mapcalc "elev_diff = elev_lid792_1m - elev_surf_1m_idw"
r.colors map=elev_diff color=differences
</pre></div>
-->

<h2>KNOWN ISSUES</h2>
Module <em>r.surf.idw</em> works only for integer (CELL) raster maps.

<h2>SEE ALSO</h2>

<em>
<a href="r.surf.contour.html">r.surf.contour</a>,
<a href="r.surf.gauss.html">r.surf.gauss</a>,
<a href="r.surf.fractal.html">r.surf.fractal</a>,
<a href="r.surf.random.html">r.surf.random</a>,
<a href="v.surf.idw.html">v.surf.idw</a>,
<a href="v.surf.rst.html">v.surf.rst</a>
</em>

<p>
Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation and Resampling</a> in GRASS GIS

<h2>AUTHOR</h2>

Greg Koerper <br>
Global Climate Research Project <br>
U.S. EPA Environmental Research Laboratory <br>
200 S.W. 35th Street, JSB <br>
Corvallis, OR 97333 

<!--
<p>
<i>Last changed: $Date$</i>
-->
